#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare_chr(const void* a,const void* b){
	return *(char*)a - *(char*)b;
}

char* inter(char* str1,int len1,char* str2,int len2){
	int i=0;int j=0;
	char* ret=(char*)malloc(len1);
	int k=0;
	int m=0;
	int flag=0;
	for(;i<len1;i++){
		for(j=0;j<len2;j++){
			if(str1[i]==str2[j]){
				//check already has this char
				for(m=0;m<k;m++){
					if(ret[m]==str1[i]){
						flag=1;
						break;
					}
				}
				if(flag==1){
					flag=0;
				}else{
					ret[k++]=str1[i];
				}
				break;
			}
		}
	}
	ret[k]='\0';
	return ret;
}

int main(int argc, char** argv){
	char* str1=argv[1];
	char* str2=argv[2];
	int str1len=strlen(str1);
	int str2len=strlen(str2);

	if(str1 ==NULL || str2==NULL){
		printf("must has str1 and str2 para\n");
		exit(0);
	}
	printf("before sort:%s,%s\n",str1,str2);
	char* ret=inter(str1,str1len,str2,str2len);
	printf("inter1: %s\n",ret);
	free(ret);

	qsort(str1,str1len,1,compare_chr);
	qsort(str2,strlen(str2),1,compare_chr);

	printf("after sort:%s,%s\n",str1,str2);

	ret=(char*)malloc(str1len);
	int i=0;int j=0;int k=0;
	for(;i<str1len && j<str2len;i++){
		//remove dump
		if(str1[i]==str2[j]){
			if(k==0){
				ret[k++]=str1[i];
			}else if(k>0 && str1[i]!=ret[k-1]){
				ret[k++]=str1[i];
			}
			j++;
		}else if( i<str2len && str1[i]>str2[j]){
			while(str1[i] > str2[j] && i< str1len && j<str2len){
				j++;
			}
		}
	}
	ret[k]='\0';
	printf("inter: %s\n",ret);
}
